python openCV图像处理之提取轮廓

导入需要的包

1
import cv2

这里只做最简单的处理,所以只需导入cv2

载入图片

1
img = cv2.imread('kindle.jpg')

图片处理

因为后面的cv2.findContours函数要求传入的为二值图像,所以需要先对图片进行处理

1
2
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #转换为灰度图像
ret, binary = cv2.threshold(gray,127,255,cv2.THRESH_BINARY) #转换为二值图像

轮廓提取

1
_,contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) #提取轮廓

contours即为轮廓的像素集合(可能有多个轮廓,需要找到自己要提取的轮廓)
具体参数可查doc.opencv.org

显示图像

cv2.drawContours(img,contours,-1,(0,0,255),2)  #图片,轮廓集合,第几个轮廓 ,画笔颜色,画笔宽度
cv2.imshow("img", img)  
cv2.waitKey(0)

所有代码及结果

#-*- coding=utf8 -*-
import cv2  
import numpy as np
img = cv2.imread('kindle.jpg')  
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)                        #转换为灰度图像
ret, binary = cv2.threshold(gray,127,255,cv2.THRESH_BINARY)        #转换为二值图像  
_,contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)#提取轮廓
cv2.drawContours(img,contours,-1,(0,0,255),2)  
cv2.imshow("img", img)  
cv2.waitKey(0)

source findcotours